package org.jaaksi.test.handler;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;

/**
 * 需要明确的几点
 * 1.通过handler发送一个消息到MessageQueue队列中（FIFO），并不会立刻被handler处理
 * 2.msg被handler处理或者被移除之后，这条msg就不存在了(hasMessages=false)
 * <p>
 * 可以认为MessageQueue中有个暂存区，只要sendMessage（无论是否延时）都会添加到这个暂存区，hasMessages是判断暂存区是否有该msg
 * 而真正添加到 MessageQueue中的时间是 msg.when作用的。handle只能在主线程空闲的时候处理messageQueue中的msg，否则等待
 * 所以如果我们在onCreate中需要依赖某个view,而在onCreate时这个view还没有绘制完成（主线程中绘制），所以使用 post可以等到UI线程完成后
 */
public class HandleTestActivity extends Activity {
    private static final int FADE_OUT = 0;
    private static final int SHOW_PROGRESS = 1;

    private int num = 0;

    private Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            Log.i("fcy", "----------------- 处理msg" + msg.what);
            Log.i("fcy", "-----------------4 has msg2=" + hasMessages(2));
            Log.i("fcy", "-----------------4 has msg1=" + hasMessages(1));
//            switch (msg.what) {
//                case FADE_OUT:
//                    break;
//                case SHOW_PROGRESS:
//                    break;
//            }
        }
    };

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.test);
    }

    public void pause(View view) {
        mHandler.sendEmptyMessageDelayed(FADE_OUT, 0);
    }

    /**
     * 移除消息
     *
     * @param view
     */
    public void remove(View view) {
        mHandler.removeMessages(1);
        boolean has = mHandler.hasMessages(1);
        Log.i("fcy", "-----------------3 removeMessages msg1 has msg1=" + has);
    }

    public void send(View view) {
        // 可以认为MessageQueue中有个暂存区，只要sendMessage（无论是否延时）都会添加到这个暂存区，hasMessages是判断暂存区是否有该msg
        // 而真正添加到 MessageQueue中的时间是 msg.when作用的。handle只能在主线程空闲的时候处理messageQueue中的msg，否则等待
        // 所以如果我们在onCreate中需要依赖某个view,而在onCreate时这个view还没有绘制完成（主线程中绘制），所以使用 post可以等到UI线程完成后
        mHandler.sendEmptyMessageDelayed(1, 10000);
        mHandler.sendEmptyMessage(2);

        boolean has = mHandler.hasMessages(1);
        Log.i("fcy", "-----------------2 has msg1=" + has);
        has = mHandler.hasMessages(2);
        Log.i("fcy", "-----------------2 has msg2=" + has);
    }
}
